package com.htx.zqs.blesmartmask.adapter;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.RadioButton;

import com.htx.zqs.blesmartmask.MyApplication;
import com.htx.zqs.blesmartmask.R;
import com.htx.zqs.blesmartmask.bean.Courses;
import com.htx.zqs.blesmartmask.utils.LocationUtil;
import com.htx.zqs.blesmartmask.utils.SPUtil;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * Created by zhao on 2018/5/12.
 */

public class HomeListAdapter extends BaseAdapter {
    private Activity activity;
    ArrayList<Courses> courses;
    private int selectID;
    private OnMyCheckChangedListener mCheckChange;
    HashMap<String, Boolean> states = new HashMap<String, Boolean>();//用于记录每个RadioButton的状态，并保证只可选一个

    public HomeListAdapter(Activity activity) {
        this.activity = activity;
    }

    @Override
    public int getCount() {
        if (courses != null) {
            return courses.size();
        } else {
            return 0;
        }
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    // 自定义的选中方法
    public void setSelectID(int position) {
        selectID = position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder viewHolder;
        if (convertView == null) {
            convertView = LayoutInflater.from(activity).inflate(R.layout.listitem_course, null);
            viewHolder = new ViewHolder();
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        //  viewHolder.radioButton.setTag(courses.get(position).getIndex());


        final RadioButton radio = (RadioButton) convertView.findViewById(R.id.radio);
        viewHolder.radioButton = radio;
        radio.setText(courses.get(position).getName());
        if (position % 2 != 0) {
            radio.setBackgroundColor(activity.getResources().getColor(R.color.white));
        } else {
            radio.setBackgroundColor(activity.getResources().getColor(R.color.smartmask));
        }

        //核心方法，判断单选按钮被按下的位置与之前的位置是否相等，然后做相应的操作。
        if (selectID == position) {
            viewHolder.radioButton.setChecked(true);
        } else {
            viewHolder.radioButton.setChecked(false);
        }
        //当RadioButton被选中时，将其状态记录进States中，并更新其他RadioButton的状态使它们不被选中
//       viewHolder.radioButton.setOnClickListener(new View.OnClickListener() {
//
//            public void onClick(View v) {
//
//                //重置，确保最多只有一项被选中
//                for (String key : states.keySet()) {
//                    states.put(key, false);
//                }
//                states.put(String.valueOf(position), radio.isChecked());
//               HomeListAdapter.this.notifyDataSetChanged();
//            }
//        });
        // 单选按钮的点击事件监听
        viewHolder.radioButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //这一句的意思跟下面的一样，不过这个是itemClick的点击监听，而下面的是RadioButton的点击监听。
                selectID = position;

                /**
                 * 在MyListView中使用mListViewAdapter.setOncheckChanged
                 * 来监听RadioButton的点击事件，（当然，首先要判空）
                 * 当我们按下单选按钮时，我们把按下的item的位置赋值给selectID
                 * ，然后在上面的if语句中判断当前点击的位置与selectID的位置
                 * 是否相等，如果不相等，那么说明按下了新的位置，那么就把原来位置上的选择取消掉，
                 * 在新的位置让单选按钮显示选中状态就可以了。
                 */
                if (mCheckChange != null)
                    mCheckChange.setSelectID(selectID);
                MyApplication.selectCourse  = courses.get(position);
                SPUtil.put(activity, LocationUtil.getUniquePsuedoID(),
                        MyApplication.selectCourse.getName(), "mLastCourseName");
            }
        });
        if (viewHolder.radioButton.isChecked()) {
            MyApplication.selectCourse = courses.get(position);
        }

        return convertView;
    }

    // 回调函数，很类似OnClickListener吧，呵呵
    public void setOncheckChanged(OnMyCheckChangedListener l) {
        mCheckChange = l;
    }

    // 回調接口
    public interface OnMyCheckChangedListener {
        void setSelectID(int selectID);
    }

    public void setData(ArrayList courses) {
        this.courses = courses;
        notifyDataSetChanged();
    }

    static class ViewHolder {
        private RadioButton radioButton;
    }
}
